package hotel.board.circuit;

import hotel.player.IPlayer;

public interface ICircuit {
	
	public final ICase STARTING_CASE = new Case(null, null, null);
	
	// REQUETES
	
	/**
	 * @return la longueur de ce circuit.
	 */
	int getCircuitLength();
	
	/**
	 * @return l'ensemble des cases de ce circuit.
	 */
	ICase[] getCases();
	
	/**
	 * @return l'ensemble des joueurs sur ce circuit.
	 */
	IPlayer[] getPlayers();
	
	/**
	 * @param c la case à interroger
	 * @return le joueur présent sur la case c, null si aucun.
	 */
	IPlayer getPlayer(ICase c);
	
	/**
	 * @param p le joueur dont on cherche la position
	 * @return la case sur laquelle se trouve le joueur p.
	 */
	ICase getCase(IPlayer p);
	
	/**
	 * @return l'indice de la case après laquelle se trouve la banque.
	 */
	int getBankPosition();
	
	/**
	 * @return l'indice de la case après laquelle se trouve la mairie.
	 */
	int getCityHallPosition();
	
	/**
	 * @return true si le dernier joueur à bouger est passé par la banque.
	 */
	boolean passedBank();
	
	/**
	 * @return true si le dernier joueur à bouger est passé par la mairie.
	 */
	boolean passedCityHall();

}
